#include "stdio.h"
#pragma region 【算法3 - 8】求矩阵鞍点
#define M 5 //矩阵的行
#define N 3 //矩阵的列
void saddle(int A[][N])
{
    int i, j, k, p, min;
    for (i = 0; i < M; i++) //按行处理
    {
        min = A[i][0];
        for (j = 1; j < N; j++)
            if (A[i][j] < min)
                min = A[i][j];  //找第i行最小
        for (j = 0; j < N; j++) //检测该行中的每一个最小值是否是鞍点
            if (A[i][j] == min) //找到一个和刚才最小值相同的数据（为什么不能在刚才把最小值所在的位置记下来？）
            {
                p = 0;
                while (p < M && A[p][j] <= min)
                    p++;
                if (p >= M)
                    printf("%d,%d,%d\n", i, j, min);
            }
    }
}
//对任意m*n的矩阵，算法的时间性能为O(m*(n + m*n))。
#pragma endregion
int main(int argc, char const *argv[])
{
    int A[M][N]={
        {3,2,4},
        {1,8,7},
        {22,14,18},
        {15,3,9},
        {33,12,12}
    };
    saddle(A);
    getchar();
    return 0;
}
